// 用于创建Vuex中最核心的store

// 引入Vue
import Vue from 'vue'
// 引入vuex
import Vuex from 'vuex'
// 在Vue中应用Vuex插件
Vue.use(Vuex)

// 准备actions——用于响应组件中的动作
const actions = {
    // context：上下文对象，value：dispatch传过来的参数n
    jia:function(context,value){
        console.log('actions中的jia被调用了')
        context.commit('JIA',value)  //调用mutations写成大写，和actions中的区分开，因为mutations强大
    },
    jian(context,value){
        console.log('actions中的jian被调用了')
        context.commit('JIAN',value)
    },
    // 一个方法处理逻辑太复杂，拆成多个方法逻辑处理，最终在调用commit
    jiaOdd(context,value){
        console.log('jiaOdd处理中。。。')
        context.dispatch('demo1',value)
    },
    demo1(context,value){
        console.log('demo1处理。。。')
        context.dispatch('demo2',value)
    },
    demo2(context,value){
        console.log('demo2执行commit。。。')
        if(context.state.sum % 2){
            context.commit('JIA',value)
        }
    },
    jiaWait(context,value){
        setTimeout(() => {
            context.commit('JIA',value)
        },500)
    }
}
// 准备mutations——用于操作数据state
const mutations = {
    // JIA:function(){}的简写方式
    // state：state对象，value：穿过来的参数n
    JIA(state,value){
        // console.log('mutations中的jia被调用了',a,b)
        state.sum += value
    },
    JIAN(state,value){
        state.sum -= value
    }
}
// 准备state——用于存储数据
const state = {
    sum:0 // 当前的和
}

// 创建store，传入三个参数：actions、mutations、state
// const store = new Vuex.Store({
//     // actions:actions, 参数和值一样可以简写actions
//     actions:actions,
//     mutations:mutations,
//     state:state
// })
// // 暴露store
// export default store

// 创建并暴露store
export default new Vuex.Store({
    // actions:actions, 参数和值一样可以简写actions
    actions:actions,
    mutations:mutations,
    state:state
})